package com.cctc.juc.demo.Bitc.BwaitAndnotify.Ajoin;

public class JoinThreadDemo {
    public static void main(String[] args) {
        Thread t1 = new Thread(() -> {
            System.out.println("thread-01");
        });
        Thread t2 = new Thread(() -> {
            System.out.println("thread-02");
        });
        Thread t3 = new Thread(() -> {
            System.out.println("thread-03");
        });

        /**
         * 线程间通信方式之：基于线程等待与唤醒机制。
         * Thread.join() 方法可以实现主线程等待子线程执行完成后再继续向下执行，以控制线程的执行顺序。
         * 底层原理：
         * Thread.join() -> join(0) -> join(long millis) -> wait(0)
         * - public final native void wait(long timeout) throws InterruptedException;
         * 说明：本地方法，让主线程处于等待状态，等到子线程执行完成后再继续向下执行。
         * 注意：该方法为 Thread.wait(long timeout) 方法，而不是 Object.wait() 方法，二者属于不同的类，注意区分。
         * 补充知识点：
         * - public static native void sleep(long millis) throws InterruptedException;
         * 说明：本地静态方法，让当前（主）线程处于等待状态，等待一段时间后再继续向下执行。
         */

        try {
            t1.start();
            t1.join();

            t2.start();
            t2.join();

            t3.start();
            t3.join();
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
    }
}
